C言語入門 2019 3 2
数年前、10回に分けて、
「C言語入門」を掲載していましたが、
読みやすいように1本にまとめました。
プログラミングに興味がない人にも、
毎号(2回目から)、話の後半は、「昔話」になっていますので、
面白おかしく読めると思います。
また、当時の世相を知ることができると思います。
プログラミング C()1 2017 10 14
「なぜ、プログラミングか」
1 ニュースでは、2020年から、
小学校の授業で、プログラミング教育が必修化されるとあり、
プログラミングに注目が集まっているからです。
2 プログラミングを知っている人と知らない人では、
コンピューターに対する見方が違ってくるからです。
同時に、IT社会に対する見方も異なってきます。
3 プログラミングを学習することによって、
自然と論理的思考が身につくからです。
「人間の言葉と機械語」
「プログラミング言語がある」と言っても、
そもそも、コンピューターは、「0」と「1」しか認識しません。
だから、プログラミングでは、
「10110000 01100001」と記述する必要があります。
しかし、これは、人間にとっては、
「0」と「1」の羅列なので、このような記述は、厳しいものがあります。
そこで、「0」と「1」の2進法をやめて、
16進法を使うことになったのです。
上記の2進法の記述は、16進法では、「B0 61」となります。
しかしながら、「B0 61」でも、
人間にとって、使いこなすには、厳しいものがあります。
そこで、16進法に代わって、
アセンブリ言語では、「MOV AL, 61h」となりました。
これで、やっと人間の言葉に近くなりました。
(2進法から16進法へ変換、16進法からアセンブリ言語は、
ウィキペディアを参考にしました)
ところで、アセンブリ言語の「MOV AL, 61h」でも、
多くの人にとって、わかりにくい「言語」でしょう。
そこで、「FORTRAN」や「COBOL」という「高級言語」が登場したのです。
こうした高級言語は、人間が通常使う言葉を多用しますので、
非常にわかりやすいものとなりました。
「コンパイルとは」
このような高級言語の登場によって、
プログラミングは、非常に楽な作業となりましたが、
「0」と「1」しか認識しないコンピューター、
つまり、「機械語」しか認識しないコンピューターと人間の「距離」は、
非常に大きなものとなってしまいました。
要するに、人間の言葉に近い高級言語を、
「0」と「1」の機械語に「翻訳」する必要があるのです。
こうした「翻訳」を「コンパイル」と言います。
「コンパイラー」によって「コンパイル」することで、
高級言語は、機械語に変換されます。
ところで、「C(1)」と書かないで、
あえて「C()1」と書いたのは、理由があります。
(次号に続く)
プログラミング C()2 2017 10 21
「まずは道具をそろえて」
前号では、コンパイラが必要であると書きました。
しかし、その前に、プログラムを書くには、
「テキストエディタ」が必要です。
多くの人が、「テキストエディタとは何か」と思うでしょう。
実は、「ウィンドウズ」にもテキストエディタが装備されています。
それが「メモ帳」というソフトウェアです。
これは、「Windows アクセサリ」の中に入っています。
最初は、つまり練習用としては、
ウィンドウズの「メモ帳」で十分です。
本や参考書を見ながら練習するには、それで十分でしょう。
ところで、ワープロソフトの「ワード」ではダメです。
ワードで書くと、改行コードや文字フォントなどが、
自動的に付加されてしまい、プログラムとしては使えなくなります。
「ちょっと昔話」
私は、20代のころ、
「RED++」というテキストエディタを、
休日に、秋葉原に買いに行ったことがあります。
あまりに高性能だったので、
結局、使いこなせなかったと思います。
後から思えば、「メモ帳」で十分だったかもしれません。
あの頃の秋葉原は、パソコンの街でした。
巨大なパソコンショップがいくつもあり、
パソコンのソフトウェア専門館もあったと思います。
(実を言うと、秋葉原がパソコンの街になる前は、
なんと、オーディオ機器の街でした。
家電も多かったです。
秋葉原は変身することで生き延びています)
今からすると想像もできないでしょうが、
その後、パソコンブームが到来して、
コンビニエンスストアにパソコン雑誌が何種類も置いてあるほどだったので、
巨大なパソコンショップがいくつあっても商売として成り立ったのでしょう。
「統合開発環境」
このようなことを書くと何か難しく感じますが、
実は、違います。
昔は、テキストエディタとコンパイラを別々に買いましたが、
これでは面倒であるということで、
テキストエディタとコンパイラがセットされたものを、
「統合開発環境」と呼んでいます。
そうすると、値段も高くなったのではないかと思うでしょうが、
今は、インターネットで無料でダウンロードできるものがあります。
だから、パソコンショップは商売として成り立たなくなったのかもしれません。
もちろん、プロ用の「統合開発環境」は有料です。
「デバッグとは」
プログラムを完璧に書くことは難しいでしょう。
それは、テストで100点を取るのと同じくらい難しいのです。
たいていは、文法上の誤り、スペルミスなど、
文章が長くなればなるほどミスは多くなります。
出版業界には「校正」という仕事があるように、
プログラムの誤りは、コンパイラがエラーとして指摘してくれます。
プログラミング C()3 2017 10 28
「プログラミングの鬼門」
プログラミングで、つまずくのは、
代表的なものでは、「変数」と「関数」でしょうか。
それから、意外なのは、
コンピューターの仕組みをよく知らないことによって、
つまずくという話を聞いたことがあります。
確かに、プログラミングをする上で、
コンピューターの仕組みを知っていないと、
意外にも壁に当たってしまうことがあるかもしれません。
「コンピューターの仕組み」
コンピューターの中心をCPU(中央演算装置)と見なせば、
CPUを中心として、コンピューターを眺めることができます。
CPUは、マザーボードという基盤に装着されています。
ここから、CPUの手足が、メモリという一時記憶装置に伸びています。
また、ハードディスクというデータの保存・記憶装置にも伸びています。
さらに、マザーボードを経由して、
ディスプレイやプリンターにもつながっています。
このような装置がなければ、
コンピューター(CPU)は、演算結果を外部に表現することはできません。
人間が、コンピューターの演算結果を知るには、
少なくとも、ディスプレイが必要となります。
そうなると、プログラミングにおいては、
演算結果をディスプレイに出力するという命令を必ず書いておく必要があります。
また、データをキーボードから入力するならば、
これも、プログラミングにおいて、
データをキーボードから入力する(受け取る)という命令を事前に書いておく必要があります。
「変数とは」
これは、ネーミングが悪いと思います。
変数とは、「筆箱」だと思えばよいのです。
たとえば、机の上に、
鉛筆が10本あったとします。
そのままでは、鉛筆が、あちこちに散らばってしまい、
収拾がつかないことになります。
そこで、机の上の鉛筆を筆箱にしまえば、
鉛筆が散らばらない上に、管理もしやすいでしょう。
コンピューターにとって、
メモリとは、机の上の作業空間のようなものです。
変数とは、データを入れておく箱のようなものです。
「変数の宣言」というと難しく感じますが、
要するに、データを入れておく箱を作ると宣言するようなものです。
「関数とは」
関数というと、数学では、
「y = f(x)」というようなものを連想するでしょうか。
数学の関数は、退屈なものですが、
プログラミングの関数とは、便利なものです。
つまり、プログラミングの関数とは、「自動販売機」のようなものです。
自動販売機にコインを入れると、缶コーヒーや缶ジュースが出てきますが、
多くの人は、自動販売機の中が、どういう仕組みになっているか知らないでしょうが、
便利に使っているでしょう。
プログラミングにおける関数とは、
プログラミングの作業を減らし、
楽をするためにあるのです。
データを関数に入れると、
自動的にデータを加工してくれて、
加工後のデータを返してくれます。
プログラミング C()4 2017 11 4
「とりあえず、C言語かな」
プログラミング言語の中で、
人間の言葉に近いとされる「高級言語」は、
古くは、「FORTRAN」や「COBOL」がありました。
「FORTRAN」は、科学技術計算の分野、
「COBOL」は、事務処理の分野とされていました。
現在、プログラミング言語は、多数ありますが、
プログラミングを初めて学ぶには、
「COBOL」が、最も人間の言葉に近く、
一番、わかりやすいと思います。
しかし、現在、「COBOL」は使われてなく、
今では、銀行の勘定系システムに残っている程度だと推定しています。
そういうわけで、現在、使われなくなった言語を学んでも仕方ないので、
別の機会に、「COBOL」について解説をします。
現在、主流とされるのは、C言語系統です。
この言語は、「C言語」→「C++」→「C#」と発展してきています。
最近では、AIプログラミング言語として「Python」が注目を集めていますが、
文法的には、「C言語」の親戚のようなものです。
「C言語」を習得した人ならば、
特に違和感なく「Python」を習得できるでしょう。
(というよりも、「Python」で楽ができます)
そういうわけで、プログラミング言語の源流を学ぶという意味で、
「C言語」の学習は、有益だと思います。
ただし、残念なのは、
「COBOL」と比較すると、
「C言語」は、人間の言葉からは少し遠いと言えるでしょう。
もちろん、難解な記号を使うことはありませんが、
言語としての発想が、「機械語」に近い印象は否めません。
そういうわけで、教育用の言語として、
「COBOL」を残してほしいと思っていますが、
主流は、やはりC言語系統ですので、
プログラミングの入り口として、
C言語を学んでいく必要があると思います。
これは、外国語の学習でも同じだと思います。
英語という言語は、習得に関して、決して楽な言語ではありませんが、
世界の主流が英語なので、学ばざるを得ないでしょう。
(日本人に向いている外国語は、スペイン語だと思います)
プログラミング言語も主流を学ぶ必要があります。
マイナーな言語では、先生もいない、参考書もないという状態になります。
「また昔話」
昔は、PC98シリーズというパソコンが全盛の時代は、
ハードディスクという記憶装置がありませんでした。
もちろん、あることはありました。
20MB程度で5万円、100MB程度で10万円という「金持ち専用の記憶装置」でした。
当時は、パソコン本体が、
20万円から30万円という高額なものだったので、
頑張って、パソコン本体を買ったら、
「有り金すべて使い切った」という状態でした。
では、庶民は、何に記憶させたか。
フロッピーディスクです。
これは、どういう記憶媒体か。
最近、音楽のレコードの復刻版が人気ですが、
そのレコードを小さくして、厚さを薄くしたようなものでした。
それでも、1MBのフロッピーディスクが1,000円ぐらいでした。
秋葉原で、10枚まとめて買って、7,000円ぐらいでした。
私は、「Windows1.0」を手に入れて、
さっそく、インストールして使ってみたものの、
ハードディスクがついてなかったので、
パソコン本体に、二つあったフロッピーディスク駆動装置で、
「マルチタスク」という状態になってしまい、
なかなか前に進まない「Windows1.0」でした。
フロッピーディスク駆動装置が激しく音を立てるが、
画面は、全く変わらないという状態でした。
プログラミング C()5 2017 11 11
「数学との違いは、代入」
代入は、数学でも使うから、
プログラミングは、数学と同じではないかと思うかもしれません。
しかし、プログラミングの代入は、ちょっと違うのです。
数学では、「1 + 2 = 3」と書きますが、
プログラミングの発想では、「3 = 1 + 2」となります。
つまり、「1 + 2」の結果が入って「3」になるとなります。
これでは、数学と大差がないと思うでしょう。
だから、「a」という記号を使うと、
数学との違いが、はっきりします。
プログラミングでは、「a = a + 1」と書きます。
数学的に考えれば、「=」ではなく、「<」ではないかと思うでしょう。
しかし、プログラミングの「=」とは、「代入」という意味です。
「a + 1」の結果を「a」に入れるという意味です。
ここが数学的に考えてしまうと、わかりにくいかもしれません。
さて、どう考えればよいか。
ここは、数学的に考えるのではなく、
コンピューターの構造を考えるべきです。
コンピューターには、メモリという一時記憶領域があります。
そこに、データを記憶させる必要があるのです。
データを記憶させる箱(領域)に「a」という名前をつけたとします。
そうすると、「a」という箱に「1」を加えたと考えてもよいでしょう。
ここで、注意が必要なのは、
いかにもコンピューターらしい問題があります。
メモリという記憶領域に「a」という領域を確保した時に、
「a」という箱が、最初から「0」だったらよいのですが、
確保しただけでは、その箱に何が入っているか、わかりません。
もし、「空白(スペース)」が入っていると厄介なことになります。
「空白(スペース)」とゼロは、別の扱いになります。
これは、土地で考えればわかりやすいでしょう。
土地を区画で区切ったとしても、
地面は砂利だったり、泥のままだったりするでしょう。
土地を使うときは、整地をしたり、アスファルト舗装するでしょう。
コンピューターのメモリという「土地」も、
こういう「整地」が必要でしょう。
そういうわけで、「a」という箱(区画)を用意したら、
まず箱の中をゼロクリアしてから、「1」を加える必要があります。
「昔は、スーパーでパソコンが売られていた」
そういう時代があったのです。
自宅近くのダイエーやイトーヨーカ堂で、
パソコンを売っていました。
当時は、パソコンといっても、
安いものでも、10万円以上だったので、
売れれば、利益が大きかったと思います。
今のようにパソコンの安売りはなかったです。
それに、ワープロソフトの「一太郎」がバージョンアップすると、
やはり、スーパーで売っていました。
しかも、エスカレーターを降りたところに、
目立つように積み上がっていました。
パソコン雑誌が、コンビニエンスストアで、
何種類も置いてある時代ですから、
パソコンやソフトをスーパーで売っていても、
不思議はなかったのです。
あの当時、よく売れていたパソコン雑誌は、
「ASAHIパソコン」と「Hello!PC」だったと思います。
駅の売店でも売っていました。
プログラミング C()6 2017 11 18
「プログラミングは、文科系向きです」
これは、私の体験なので、普遍的なものではないかもしれませんが、
私は、他人が書いたプログラムを読む機会は多くありました。
ある時、「これは、ひょっとして」と思うことがありました。
そこで、そのプログラムを書いたシステムエンジニアに聞いてみました。
そのシステムエンジニアから、
「お察しの通り、私は、文学部出身です」という回答が返ってきました。
私は、そのプログラムを読んだ時、
「これは、美しいプログラムであり、
なおかつ読みやすい」と感じたのです。
プログラムを書く時は、
常に他人に読まれることを意識して書く必要があります。
プログラムというものは、いつかメンテナンスや改修が必要になるのです。
だからこそ、だれが読んでもわかりやすいプログラムを書く必要があるのです。
このような能力は、文科系の方が優れています。
「括弧(かっこ)に違和感があるかも」
最近のプログラミング言語では、C言語だけでなく、
多くの言語で、「{ }」という括弧を使います。
このような括弧は、日常生活では使いません。
本や雑誌でも、こうした括弧は見かけないでしょう。
普通は、括弧と言えば、「( )」を使うでしょう。
ところが、プログラミングでは、よく見かけます。
しかも、使い方が、ちょっと変わっているので、違和感があると思います。
{
命令文;
}
このような使い方は、日常生活では、なじみがないので、
最初は、大いに違和感があると思いますが、
これは、慣れていくしかありません。
「外壁か殻か」
家を建てた時に、柱だけで壁のない家はないでしょう。
夏ならば、何とかなりますが、冬は無理でしょう。
実は、C言語にも「外壁」のようなものがあります。
普通に考えれば、プログラムは、以下のようでも十分だと考えるでしょう。
命令文
命令文
・・・
しかし、C言語においては、
こうした命令文を「外壁」で包む必要があります。
外壁で包んだ結果が、以下のようになります。
int main(void)
{
命令文;
命令文;
・・・
}
本当は、「int」にも「main()」にも、
「void」にも意味があるのですが、
プログラミング入門においては、
命令文を包む「外壁」のようなものと覚えた方が楽です。
「はた迷惑な話」
昔、パソコンがブームになったころの話ですが、
大いに困ったことがありました。
それは、よく、知人から、このようなことを聞かれたからです。
「プログラミングができると聞いたぞ。
それならば、一太郎やロータスの使い方を教えてくれ」
(昔は、ワードやエクセルよりも、
一太郎やロータスを使う人が多かったのです)
私にとって、なぜ、「プログラミングができる」と
「一太郎やロータスが詳しい」が一致するのか不思議に思いました。
一般的に、プログラマーというものは、
他人が作ったプログラムが嫌いです。
もちろん、業務上、必要に迫られて、
他人が作ったプログラムを読むことはあるでしょうが、
本音は、他人が作ったプログラムは嫌いです。
一太郎やロータスも、「他人が作ったプログラム」と言えます。
それどころか、長いものになると、
自分が作ったプログラムを忘れてしまうことがあります。
そういうわけで、プログラミングでは、
コメント文を入れておく必要があります。
たとえば、「/*ここは、金額の集計*/」という感じです。
プログラミング C()7 2017 11 25
「プログラミングとは、料理のようなもの」
中華料理の中では、
日本人に人気がある「酢豚」を作るとすると、どうなるか。
この料理は、手間がかかる料理なので、
つまり、下ごしらえと手順が重要なので、
プロジェクトで考える必要があります。
名付けて「酢豚プロジェクト」です。
まず、どんな食材が必要か。
豚肉、玉ねぎ、ピーマン、にんじん。
それに「酢豚のたれ」。
さすがに「たれ」まで自作すると、手間が増えますので、
ここは、「酢豚の素」を使います。
これで少し手間が省けます。
プログラミングでは、
誰かが作った外部関数を使うようなものです。
このように、プログラミングでは、「楽をする」という発想が必要です。
何でもかんでも自作をしようとすると、
労力ばかりかかって、肝心のプロジェクトが遅れてしまいます。
さて、料理の手順は、以下のとおり。
熱したフライパンに油を入れる。
玉ねぎを炒める。
ピーマンを炒める。
にんじんを炒める。
つまり、玉ねぎ、ピーマン、にんじんを順番に入れて、炒めることになります。
ちょっと待て。
ピーマンは、火が通りやすいのに、
にんじんは、火が通りにくい。
そこで、にんじんは、下ごしらえの時に、
鍋で煮て、やわらかくしておく必要がありました。
要するに外部処理です。
これも、プログラミングでは、よくあることで、
外部でデータを加工しておいて、加工データをもってくるということです。
おっと、肝心なことを忘れていた。
酢豚の豚肉は、油で揚げてあります。
これを料理の途中で気づくと大混乱になります。
やはり、料理は、プロジェクト管理が重要です。
要するに、システム設計をしっかり立てておく必要があります。
豚肉に、塩・こしょうで下味をつけて、卵を豚肉によくもみ込みます。
それから、下ごしらえした豚肉に片栗粉をつけて、油で揚げます。
この下ごしらえは、先にやっておくべきでした。
「酢豚プロジェクト」では、念入りに手順や計画を考える必要があります。
これで、やっとメインの作業に戻れます。
食材を順番に入れて炒める。
油で揚げた豚肉を入れる。
最後に酢豚の素を入れて軽く炒める。
これで、「酢豚関数」は完成です。
「中華料理 酢豚(食材)」
C言語の書式では、こうなります。
「型名 関数の名前(引数) {処理}」
「引数」とは、関数に入れる材料(データ)のことです。
これをレシピにすれば、
みんなが「酢豚関数」を使って料理を楽しむことができます。
(注意)
この料理手順は、昔、私が家庭料理で作ったものなので、
当時の記憶を思い出しながら書きましたので、
手順や材料が間違っているかもしれません。
実際に、酢豚を作るときは、料理の本を読んでください。
「SCSIなるもの」
これを「スカジー」と読みます。
昔は、「泣く子も黙るSCSI」と言われたものでした。
今は、外付けのデバイス(機器)を接続するのに、
USBケーブルを使いますが、
昔は、そんな気の利いたものはありませんでした。
では、外付けのデバイスをどうやってパソコンに接続したのか。
それは、SCSIを使ったのです。
それにしても、SCSIケーブルは、太くて曲がらなくて短かったのです。
だから、外付けのデバイスをパソコン本体に接近して設置する必要がありました。
(当時、よく使われていたデバイスは、光磁気デバイスのMOディスク・ドライブです)
そのうえ、ウィンドウズがSCSIをサポートしていませんでしたので、
パソコン本体(マザーボード)にSCSIボードを設置する必要がありました。
このSCSIボードが、あの当時、3万円から5万円ぐらいでした。
高速なものになると、7万円もしました。
さらに、SCSIボードには「相性」がありました。
外部デバイスと「相性」が悪くて、
デバイスを認識してくれないということがありました。
相性が悪いのは、人間同士だけでなく、
パソコンのデバイスにもあったのです。
そういうわけで、SCSIを使って、
外部機器を接続しているということは、
パソコン好きの人には、ステータスのようなものでした。
要するに、パソコン仲間では「自慢ができる」ということです。
今となっては、SCSIを使っているシステムはあるのでしょうか。
サーバーで使っているかもしれませんが(SCSIハードディスク)、
パソコンで使っている人がいたら驚きです。
プログラミング C()8 2017 12 2
「ちょっとC言語プログラムを動かしてみたい」
C言語プログラミングの講義ばかりで退屈だ。
実際に、C言語プログラムを動かしてみたい。
話のタネに、C言語でプログラムを作って、
他人に自慢したい。
そういう人もいるかもしれません。
あるいは、体験しながら覚えるという人もいるかもしれません。
しかし、実際に、C言語プログラムを動かすとなると、
意外にも、準備の段階で手間がかかるのです。
つまり、C言語の開発環境を準備するのは、
初心者には難しいと言えます。
まず、プログラムをコーディングする「エディタ」を用意して、
さらに、「エディタ」で書いたC言語を「コンパイラ」で、
コンピューターが理解できる「機械語」に翻訳しなければなりません。
ところが、今や、便利な時代になって、
なんとインターネットのブラウザで、
プログラミングが体験できるのです。
「エディタ」や「コンパイラ」は必要ないのです。
では、さっそく始めましょう。
「Google」の検索で、「coding ground」と入力して検索してください。
検索結果の「Coding Ground - TutorialsPoint」をクリックしてください。
そうすると、「coding ground」の「Development Environment」という画面が現れます。
この画面を、下へひたすらスクロールすると、
「Advanced IDEs」というタイトルが現れます。
ここで、三角マークの「C」をクリックすると、
C言語の開発環境が現れます。
この画面は、三つに分かれていますが、
上半分の右側が「エディタ」になっています。
以下のような文字が表示されていると思います。
int main()
{
命令文:
}
次に、下半分の緑色の画面が、
プログラムの実行結果を表す画面です。
では、さっそくC言語プログラムを実行してみましょう。
「まだ、プログラムを書いていないぞ」と言うかもしれません。
実は、すでに右上の画面には、C言語プログラムが入力されているのです。
それが、上記の「int main()」以下の文です。
もちろん、これでは、コンピューターが認識してくれません。
C言語を「機械語」に変換する作業、
つまり、「コンパイル」が必要です。
「int main()」という文字の上のほうに、
「Compile」という文字ボタンがありますので、それを押してください。
これで、エラーが表示されなければ、「機械語」に変換できました。
もし、エラーがある場合は、緑色の画面にエラーが表示されます。
次に、「Compile」の右に「Execute」という文字ボタンがあります。
これを押してください。
そうすると、下の緑色の画面の中に、
「Hollow, World!」という文字が表示されています。
これで、すっかり満足する人と、
「これでは、自分でプログラムを書いたわけではないので、
他人に自慢ができない」という人がいるでしょう。
こういう不純な動機も、
意外にもプログラミング学習を長続きさせる動機となります。
そこで、右上の画面にある、
「printf("Hello, World!\n");」を書き換えましょう。
以下のように書き換えます。
「printf("%d\n",60*24*365);」
「"Hello, World!\n"」を「"%d\n"」にして、
「,60*24*365」を追加するようなものです。
全部、半角の英数文字で入力してください。
「*」は、掛け算の意味です。
(注意)
「\」と「\」(バックスラッシュ)は同じですので、気にしないでください。
(便宜的にバックスラッシュを全角文字で表示していますが、
半角の英数文字で入力してください。
キーボードの「\」を押せば、自動的に半角の「\」になります)
このプログラムは、
「1年は、何分あるか」というプログラムです。
スペルミスがないかを確認したら、
「Compile」ボタンを押します。
(下の緑色の画面に何かエラーが表示されたら、スペルミスがないかを確認してください)
次に、「Execute」ボタンを押してください。
そうすると、実行結果が、下の緑色の画面に現れます。
緑色の画面に「525600」と表示されたら、成功です。
「謎の数字、8086」
今の若い人には、「8086」という数字は、
謎の数字に見えるでしょうが、
昔のパソコンファンには、懐かしく思えるでしょう。
「8086」とは、インテルのCPUを表す数字です。
これは、インテルが開発した16ビットのマイクロプロセッサのことです。
(「8080」が、8ビットのマイクロプロセッサだったと思います)
この「8086」は、「80286」へ発展します。
次の「80386」は、32ビットになります。
この32ビットは、「80486」、「Pentium」へと発展していきます。
この当時は、パソコンブームだったので、
CPUの上位グレードが発表されるたびにパソコンを買い替える時代だったのです。
だからこそ、イトーヨーカ堂のようなスーパーでも、
パソコンを売っていました。
しかも、パソコン専用の売り場までありました。
さすがに大根を買いに来たついでにパソコンを買うことありませんでしたが、
家族が買い物をしている間、お父さんはパソコンを見ているという感じだったのです。
プログラミング C()9 2017 12 9
「前号の復習、これは肝心なことなので」
前号では、「ちょっとC言語プログラムを動かしてみたい」ということで、
実際に、プログラムを動かしてみました。
特にプログラミングの文法の解説もなく、
さらりとプログラムを実行しました。
しかしながら、ここで、
しっかり文法的なものを理解しておく必要があります。
ここが肝心なところです。
前号では、「1年は何分あるか」をプログラムで動かしました。
数学的には、「60分×24時間×365日」となります。
これをプログラミングで書くと、
「60*24*365」となります。
(「*」は「かける」という意味です)
命令文は、これだけですので、
あとは、命令文に「洋服を着せる」、
つまり、以下のようなものを付け加えます。
int main()
{
命令文;
}
という書式をつければよいということになります。
そうすると、以下のようになります。
int main()
{
60*24*365;
}
意外に忘れるのが、「;」です。
命令文の「60*24*365」の後につけます。
これで、「Compile」をしてから、
「Execute」をすると、どうなるか。
画面には、何も表示されません。
文法上の誤りがないのに、なぜか何も表示されないのです。
「いったい、なぜか」と思うでしょう。
ここで、コンピューターの言い分を書きましょう。
「計算結果を画面に表示する」という命令文がなかったら、
画面には何も表示しなかったと言い張ります。
多くの人は、「コンピューターは、なんて石頭だろう」と思うでしょう。
そこで、計算結果を画面に表示させる命令文を書く必要があります。
それには、「printf()関数」を使います。
この関数には、「print」という文字がありますので、
プリンターで印刷するのかと思ってしまいますが、
画面に表示するのに使う命令です。
たとえば、画面に「こんばんわ」と表示する時は、
以下のようになります。
printf("こんばんわ\n");
(「\n」は改行を意味します)
そうすると、「60*24*365」の結果を表示するには、どうするか。
「printf("60*24*365\n");」でしょうか。
これは、間違いです。
コンピューターは石頭です。
「60*24*365」の計算結果は、数字の「整数」です。
一方、「"」で囲まれた区域は、「文字」となります。
コンピューターは、「整数」と「文字」で混乱します。
そこで、ここで手続きが必要になるのです。
「60*24*365」の計算結果である「整数」を「器」に入れる必要があります。
ここでは、「%d」という記号を使います。
「d」とは、10進数の意味です。
つまり、「60*24*365」の計算結果を「%d」という器に入れるということで、
「printf("%d",60*24*365);」となります。
これで、石頭であるコンピューターを納得させたでしょう。
int main()
{
printf("%d",60*24*365);
}
やれやれ、やっと完成した。
「Compile」をする。
「あれっ」
コンパイル・エラーが表示されました。
どこが間違っているのか。
また、ここで、コンピューターは「石頭」であることを露呈します。
実は、「printf()関数」というのは外部関数なので、
どこからか参照をする必要があったのです。
そこで、「#include <stdio.h>」という文を、
プログラムの先頭に置く必要があったのです。
#include <stdio.h>
int main()
{
printf("%d\n",60*24*365);
}
「%d」の後に改行の「\n」をつけないと、
コンピューターは改行をしてくれませんので、
計算結果の表示が見づらくなります。
そこで、まめに「\n」を使いましょう。
お疲れさまでした。
いかにコンピューターが石頭であることがわかったでしょう。
早く「AIコンピューター」が実用的なものとなり、
プログラム作業においても「融通を利かしてほしいもの」です。
(注意)
「\」と「\」(バックスラッシュ)は同じですので、気にしないでください。
(便宜的にバックスラッシュを全角文字で表示していますが、
半角の英数文字で入力してください。
キーボードの「\」を押せば、自動的に半角の「\」になります)
「ワープロ機という禁断の果実」
ここで、タイムマシンで、1995年から1997年ごろに行ってみましょう。
会社のオフィスをタイムマシンの窓から眺めましょう。
1995年と言えば、
「Windows95」が発売されて、
みんなが競って、Windows95パソコンを買った頃です。
タイムマシンの窓から眺めると、
「おやっ」という印象を持つでしょう。
当時のパソコンでは、
ワープロは「一太郎」、表計算では「Lotus123」が多かったと思います。
しかし、机の上にあるパソコンのようなものが、
なんだか変です。
この時代は、液晶ディスプレイはなかったので、
場所を取るブラウン管のディスプレイが机の上を占領しているのはともかく、
パソコンに似ているようなものが置かれています。
実は、これがワープロ専用機です。
一見すると、小型のデスクトップパソコンに見えますが、
ワープロに特化した端末機です。
端末機といっても、ケーブルでつながっているのは、プリンターのみです。
別の机を見ると、
ノート型パソコンがあるように見えます。
しかし、これも、ワープロ専用機です。
この時代は、パソコンがあるにもかかわらず、
ワープロ専用機で文章を作っていました。
なぜ、こんなことになっているのか。
実は、パソコンの「一太郎」や「ワード」よりも、
ワープロ専用機のほうが文章を作るのが圧倒的に楽だからです。
何しろ、ワープロに特化していますので、
実に、使いやすかったのです。
おそらく、全部、英語で書くならば、
「ワード」のほうがよいのでしょうが、
日本語の文章の場合、文字を大きしたり、小さくしたり、
アンダーラインを引いたり、ルビを振ったり、罫線で囲ったり、
いろいろと細工が多いので、ワープロ専用機のほうが使いやすかったのです。
おそらく、団塊の世代向けに、
ワープロ専用機を発売すると、それなりに売れると思います。
プログラミング C()10 2017 12 16
「今後の方針」
今までは、C言語のプログラミング入門を書いてきましたが、
ある程度、基礎的なことを説明したと思いますので、
C言語については、終了したいと思います。
本屋に行けば、C言語入門の本は、たくさんあるからです。
続くプログラミング入門は、
最新鋭の言語である「Python」(パイソン)にしたいと思います。
まだ、日本では、「Python」というプログラミング言語は、
あまり知られてなく、参考書も少ないかもしれません。
しかし、プログラミング学習には、最適な言語です。
そのうえ、C言語で書くと50行にもなるプログラムが、
「Python」では、30行程度で済む可能性があります。
さらに、最近は、
AIコンピューターのプログラミング言語としても、
有力になってきました。
それはともかく、
「Python」というプログラミング言語は、
プログラミング学習には、最適だと思います。
「Python」の基礎を説明した後は、
「いにしえの言語」である「COBOL」入門の説明を行いたいと思います。
この言語は、今は使われなくなったと言われますが、
銀行の勘定系システムでは、まだ一部使われていると言われています。
この言語を取り上げる理由は、
「COBOL」が、人間の言葉に最も近いからです。
さて、C言語の復習を始めましょう。
「変数と代入」
これは、以前、解説をしましたが、
再度、復習の意味で書きましょう。
変数とは、データを入れる箱のようなものです。
書式は、以下のようなものになります。
「型 変数名;」(変数の宣言)
「int tensu;」
変数の宣言とは、大げさな感じがしますが、
「これから変数を使います」と宣言するようなものです。
「型」とは、変数で使うデータの型で、
ここでは、整数を使いますので、整数を意味する「int」となっています。
「tensu」とは、「点数」のことです。
これで、コンピューターのメモリには、
「tensu」という領域が確保されました。
ここが重要ですが、
「tensu」という領域が確保できても、
その中に何が入っているか不明です。
この説明では、ちょっとわかりにくいかもしれません。
たとえば、ある土地を区画で買うとします。
しかし、その区画には、木が生えていたり、石があったりするでしょう。
そこで、整地をする必要があります。
コンピューターのメモリも、
確保しただけでは、なかに何が入っているかわかりません。
そこで、「整地」をする必要があるのです。
ここで、「代入」という作業が必要になります。
int tensu;(関数の宣言)
tensu = 0;(代入)
ここで気になるのは、「=」でしょう。
数学では、イコールの意味ですが、
プログラミングでは、「代入」という意味です。
つまり、右にあるものを左に入れるという意味です。
ここでは、「0」を「tensu」に入れることになります。
これで、「tensu」という箱は、「整地」ができました。
ここでは、「tensu」という「器」をゼロクリアしましたが、
これは、そもそも点数を入れる「器」なので、
最初から、点数を入力しても問題ありません。
int tensu;(関数の宣言)
tensu = 80;(点数の代入)
printf("%d\n",tensu);
これをコーディングすれば、以下のようになります。
#include <stdio.h>
int main()
{
int tensu;
tensu = 80;
printf("%d\n",tensu);
}
「四則演算」
これは、数学では、
「+」、「−」、「×」、「÷」という記号を使いますが、
プログラミングでは、半角の英数を使います。
つまり、キーボードにある記号を使います。
そうすると、「+」と「-」はありますが、
「×」と「÷」はありませんので、
「*」と「/」を使います。
それでは、台形の面積を求めてみましょう。
「a」が上底、「b」が下底、「c」が高さです。
int a;
int b;
int c;
a = 10;
b = 20;
c = 10;
printf("%d\n",(a + b)*c/2);
この命令は、短縮した書き方ができます。
int a = 10;
int b = 20;
int c = 10;
printf("%d\n",(a + b)*c/2);
つまり、「関数の宣言」と「代入」を、
いっぺんに行う書き方です。
「3.1の時代」
当時、社会現象とまで言われた「Windows95ブーム」がありました。
最近、新型のiPhoneが発売されると行列ができると報道されますが、
Windows95のお祭り騒ぎは、その10倍すごかったのです。
でも、その前は、Windows3.1の時代が長く続いたのです。
Windows3.1も、それなりに使いやすかったと思います。
私は、Windows95パソコンを買わず、
わざわざ、Windows95への無料アップグレード券がついたWindows3.1パソコンを買ったのです。
その理由は、3.1から95へアップグレート作業を楽しめるからです。
知人は、「最初からWindows95パソコンを買えばいいのに」と言っていました。
でも、当時のパソコン雑誌では、
「Windows3.1からWindows95へ移行」特集が、よく掲載されていましたので、
私は、つい、お祭り騒ぎに乗ってしまいました。
私の記憶が正しければ、
当時は、俳優の高倉健さんが、
富士通の「FMV」パソコンのCMに出演していたと思います。
確か、CMでは、高倉健さんが、
FMVパソコンを目の前にして、
「簡単じゃねーか」というセリフを言っていたと思います。